<script type="text/javascript">
	function pasarVariables(pagina, nombres) {
  pagina +="?";
  nomVec = nombres.split(",");
  for (i=0; i<nomVec.length; i++)
    pagina += nomVec[i] + "=" + escape(eval(nomVec[i]))+"&";
  pagina = pagina.substring(0,pagina.length-1);
  location.href=pagina;
}
</script>
<div class="content clear-block">
	<h2>Cap&iacute;tulo 6 Auditar actividad</h2>
<br /><br />
<p class="definicion" align="justify">
Podemos configurar Oracle para que autdite la actividad de nuestra base de datos hasta en 4 niveles diferentes de profundidad. Los resultados de la auditoria podemos almacenarlos dentro de la base de datos o en ficheros dentro de nuestro sistema operativo. El parametro a modificar seria: AUDIT_TRAIL.
<br /><br />
Para que lo guarde en base de datos:
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql>ALTER SYSTEM SET AUDIT_TRAIL=DB SCOPE=SPFILE;
</p></pre></blockquote>
<p class="definicion" align="justify">
Para que lo guarde en un fichero:
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql> ALTER SYSTEM SET AUDIT_TRAIL=OS SCOPE=SPFILE;
</p></pre></blockquote>
<p class="definicion" align="justify">
Como nos muestra el comando este marametro no se puede cambiar directamente en memoria por lo que tendremo que reiniciar nuestra base de datos para que el parametro tenga efecto. 
<br /><br />
Si elegimos el sistema operativo como opcion para almacenar los resultados de nuestra auditoria, tendremos que utilizar el visualizador de eventos de windows para ver los resultados (Panel de control > Herramientas Administrativas > Visor de Eventos).
<br /><br />
Si la opci&oacute;n es la base de datos, los resultados los consultaremos en la tabla SYS.AUD$ o DBA_AUDIT_TRAIL.
<br /><br />
Una vez indicado donde vamos a almacenar los resultados de la auditoria tenemos que configurar que eventos vamos a auditar.
<br /><br />
Ej. Auditamos eventos CREATE TABLE, DROP o TRUNCATE TABLE.
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql> AUDIT table;
</p></pre></blockquote>
<p class="definicion" align="justify">
La auditoria la podemos restringir a un usuario.
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql> AUDIT table BY MOGU;
</p></pre></blockquote>
<p class="definicion" align="justify">
Podemos configurar que se guarde un evento por sesi&oacute;n o por acceso.
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql> AUDIT table BY SESSION;
sql> AUDIT table BY ACCESS;
</p></pre></blockquote>
<p class="definicion" align="justify">
Configurar cuando el comando ha sido exitoso o se ha ejecutado con error.
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql> AUDIT table WITH SUCCESSFUL;
sql> AUDIT table WITH NOT SUCCESSFUL;
</p></pre></blockquote>
<p class="definicion" align="justify">
Para ver que eventos se estan registrando en nuestra base de datos consultaremos la tabla DBA_STMT_AUDIT_OPTS.
<br /><br />
Para deshabilitar eventos auditados utilizaremos:
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql> NOAUDIT table BY MOGU;
</p></pre></blockquote>
<p class="definicion" align="justify">
Otras opciones que nos pueden resultar importantes son:
</p>
<blockquote>
-EXECUTE PROCEDURE: Registra cualquier procedimiento ejecutado.<br /><br />
-INSERT TABLE.<br /><br />
-LOCK TABLE: Cuando se realiza un bloqueo de una tabla.<br /><br />
-SESSION: Cuando se inicia una nueva sesion.<br /><br />
-TABLESPACE: create, drop o alter de un tablespace.<br /><br />
</blockquote>
<p class="definicion" align="justify">
Tambien podemos auditar todas aquellas transacciones que requieran un determinado privilegio.
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql> AUDIT CREATE ANY TABLE.
</p></pre></blockquote>
<p class="definicion" align="justify">
Al igual que en le caso anterior tambien podemos configurar esta auditoria a un determinado usuario, por acceso o por sesion. Para saber que privilegios se estan auditando consultaremos la tabla DBA_PRIV_AUDIT_OPTS.
<br /><br />
Podemos auditar acciones sobre determinados objetos de nuestra base de datos.
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql> AUDIT select ON MOGU.MiTabla;
</p></pre></blockquote>
<p class="definicion" align="justify">
Para auditar un cierto comando sobre un determinado objeto cuando se ha ejecutado con error:
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql> AUDIT inser ON MOGU.MiTabla WITH NOT SUCCESSFUL;
</p></pre></blockquote>
<p class="definicion" align="justify">
Para saber que objetos estan siendo auditados consultaremos la tabla DBA_OBJ_AUDIT_OPTS.
<br /><br />
Aunque dejemos de auditar un determinado evento los registros que se han almacenado en base de datos siguen presentes. Para purgar registros antiguos haremos:
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql> DELETE SYS.AUD$ WHERE timestamp#<SYSDATE-90;
</p></pre></blockquote>
<p class="definicion" align="justify">
<b>FGA (Fine Grained auditing)</b> 
<br /><br />
FGA permite auditar el acceso a los registros de una tabla basandose en el contenido del dato. Para poder configurar este tipo de auditoria utilizaremos el paquete DBMS_FGA.ADD_POLICY.
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql> DBMS_FGA.ADD_POLICY(object_schema=>'HR'
,object_name=>'EMPLOYEES'
,policy_name=>'COMPENSATION_AUD'
,audit_column=>'SALARY, COMMISSION_PCT'
,enable=>FALSE
,statement_types=>'SELECT');
</p></pre></blockquote>
<p class="definicion" align="justify">
En el ejemplo estamos creando una nueva politica COMPENSATION_AUD, basada en el comando select sobre la tabla EMPLOYESS y cada vez que se haga referencia a la columna SALARY o COMMISION_PCT. De momento esta politica de auditoria esta desactivada.
<br /><br />
Para activar una politica de auditoria haremos:
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql> DBMS_FGA.ENABLE_POLICY(object_schema=>'HR'
,object_name=>'EMPLOYEES'
,policy_name=>'COMPENSATION_AUD');
</p></pre></blockquote>
<p class="definicion" align="justify">
Para deshabilitar una politica de auditoria haremos:
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>DBMS_FGA.DISABLE_POLICY(object_schema=>'HR'
,object_name=>'EMPLOYEES'
,policy_name=>'COMPENSATION_AUD');
</p></pre></blockquote>
<p class="definicion" align="justify">
Para borrar una politica de auditoria haremos:
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>DBMS_FGA.DROP_POLICY(object_schema=>'HR'
,object_name=>'EMPLOYEES'
,policy_name=>'COMPENSATION_AUD');
</p></pre></blockquote>
<p class="definicion" align="justify">
Para saber las diferentes politicas de auditoria que tiene nuestra base de datos consultaremos la tabla DBA_AUDIT_POLICIES.
<br /><br />
Para acceder a los registros almacenados por FGA consultaremos la tabla DBA_FGA_AUDIT_TRAIL.
</p>
</div>